Để nắm vững chu kỳ sống của một đối tượng C++ là phải kiểm soát hoàn toàn các cơ chế tồn tại bên trong vùng nhớ động và ngăn xếp. Kiểm soát sao chép xác định cách một lớp quản lý thời gian sống qua hai thao tác: hàm dựng sao chép và hàm dựng sao chép cũng như toán tử gán sao chép.
1. Khởi tạo so với Gán giá trị
Khởi tạo trực tiếp (ví dụ, string dots(10, '.')) gọi trực tiếp một hàm dựng. Tuy nhiên, khởi tạo sao chép (string s2 = dots) dựa vào hàm dựng sao chép. Khác với khởi tạo, gán giá trị (trans = accum) ghi đè lên một đối tượng đã tồn tại bằng cách sử dụng toán tử =. Một ràng buộc quan trọng: tham số của hàm dựng sao chép phải là một tham chiếu (const Foo&); nếu không, việc truyền tham số theo giá trị sẽ gây ra một vòng lặp đệ quy vô hạn của các lời gọi sao chép.
2. Vai trò của việc tổng hợp
Nếu bạn không định nghĩa các thành viên này, trình biên dịch sẽ cung cấp phiên bản tổng hợp các phiên bản thực hiện sao chép từng thành viên. Lưu ý rằng mặc dù đủ dùng cho các kiểu đơn giản, nhưng chúng thường thất bại với các lớp quản lý bộ nhớ động, dẫn đến con trỏ treo hoặc giải phóng bộ nhớ kép.